package cn.zf233.xcloud.commom;

import cn.zf233.xcloud.commom.enums.ClassifyENUM;
import cn.zf233.xcloud.commom.enums.DataUnitENUM;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * Created by zf233 on 2020/1/30
 * XCloud 所有常量
 */
public class Const {

    public static final String PARENTID = "parentid";         // Session Key-当前文件夹ID
    public static final String REAL_IP = "realIpAddress";     // Session Key-当前用户请求真实IP
    public static final String CURRENT_USER = "currentUser";  // Session Key-当前用户信息
    public static final String ABSOLUTEPATH = "absolutePath"; // Session Key-当前文件夹所在路径

    public static final String DOMAIN_NAME = "zf233";
    public static final String APP_VERSION = "app_version";

    public static final long USER_BASE_CAPACITY = DataUnitENUM.MB.bytes(500L); // 用户基础容量
    public static final long USER_BASE_TRAFFIC = DataUnitENUM.MB.bytes(250L);  // 用户基础流量
    public static final int USER_BASE_SHARE_NUMBER = 100;                           // 用户基础分享次数
    public static final int XCLOUD_ADMIN_FLOW_COUNT_DAY = 31;                       // 流量监控记录天数（建议为奇数）

    public static final Long OSS_PERMISSION_URL_TIMEOUT_MINUTES = 30L;                         // 阿里oss加权访问URL有效期（分钟）
    public static final String XCLOUD_FILE_CACHE_PREFIX = "file:cache.";                       // 文件缓存Key前缀
    public static final String XCLOUD_FILE_SHARD_CACHE_PREFIX = "file:shard:cache.";           // 文件分片缓存Key前缀
    public static final long MEMORY_SIZE = DataUnitENUM.MB.bytes(500L);                   // 内存可用大小(MB)
    public static final int SHARD_FILE_SIZE = DataUnitENUM.MB.bytes(1L).intValue();       // 文件缓存分片大小(1MB)
    public static final String OSS_PATH_PREFIX = "https://zf233.oss-cn-beijing.aliyuncs.com/"; // 阿里oss外网访问URL前缀

    public static final String FILE_SHARE_LINK_PREFIX = "https://www.xcloud.show/share/get/";                // 获取文件的分享链接前缀
    public static final String SHARE_QR_FILE_NAME_PREFIX = "file_share_";                                    // 生成的二维码文件名前缀
    public static final String SHARE_QR_STRONGER_REAL_PATH = "/www/server/static/img/share_qr";              // 生成的二维码存储的路径（此路径为nginx动静分离静态文件路径，可通过url访问）
    public static final String SHARE_QR_REQUEST_URL_PREFIX = "https://www.xcloud.show/static/img/share_qr/"; // 生成的二维码访问Url前缀
    public static final String SHARE_QR_LOGO_URL = "https://www.xcloud.show/static/img/test.png";            // 二维码插入Logo文件的Url地址
    public static final String SHARE_QR_LOGO_REAL_PATH = "/www/server/static/img/test.png";                  // 二维码插入Logo文件的服务器绝对路径
    public static final String SHARE_QR_LOGO_CLASS_PATH = "classpath:static/system/logo.png";                // 二维码插入Logo文件的类路径

    public static final String USER_HEAD_FILE_NAME_PREFIX = "user_head_id_";                          // 更新的头像文件名前缀
    public static final String USER_HEAD_FILE_REAL_PATH = "/www/server/static/img/head";              // 更新的头像文件存储路径（此路径为nginx动静分离静态文件路径，可通过url访问）
    public static final String USER_HEAD_URL_PREFIX = "https://www.xcloud.show/static/img/head/";     // 更新的头像访问Url前缀
    public static final String DEFAULT_USER_HEAD_URL = "https://www.xcloud.show/static/img/head.png"; // 用户默认头像

    public static final long USER_REMEMBER_ME_TIMEOUT = TimeUnit.DAYS.toSeconds(7L);    // 记住我功能的最长超时时间（秒）
    public static final String USER_REMEMBER_ME_COOKIE_KEY = "XCLOUD_REMEMBER_ME_KEY";           // 配合实现记住我功能的Redis key
    public static final String USER_SESSION_STATUS_PREFIX = "zf233:user:session:status:id.";     // 用户会话状态Redis Key
    public static final String USER_LOGIN_FLAG_BIT_SET_KEY = "todayUserLoginFlagBitSetKey";      // 当天登陆过的用户Redis Key（BitSet）
    public static final String USER_REBINDING_EMAIL_PREFIX = "zf233:user:rebinding:email:id.";   // 用户绑定验证码前缀-邮箱
    public static final String USER_REBINDING_PHONE_PREFIX = "zf233:user:rebinding:phone:id.";   // 用户绑定验证码前缀-手机
    public static final String USER_LOGIN_CODE_EMAIL_PREFIX = "zf233:user:login:code:email:id."; // 用户登陆验证码前缀-邮箱
    public static final String USER_LOGIN_CODE_PHONE_PREFIX = "zf233:user:login:code:phone:id."; // 用户登陆验证码前缀-手机

    public static final Map<String, ClassifyENUM> CLASSIFY_MAP;                                                                  // 文件分类对应关系
    public static final Map<String, String> XCLOUD_FILE_TYPE_ICON_MAP;                                                           // 文件类型对应图标
    public static final String XCLOUD_FILE_TYPE_ICON_PREFIX = "https://www.xcloud.show/static/img/xcloud_front/file_type/icon/"; // 文件类型图标Url前缀

    public interface SessionAttributeCode {
        String FILE_VOS = "fileVos";           // 文件展示对象
        String ERROR_MSG = "errorMsg";         // 错误信息
        String ERROR_BACK = "errorBack";       // 错误跳转页面
        String NOTICE_MSG = "noticeMsg";       // 通知信息
        String NOTICE_BACK = "noticeBack";     // 通知跳转页面
        String NOTICE_TITLE = "noticeTitle";   // 通知标题
        String MATCH_CODE = "matchCode";       // 搜索关键字
        String FILE_CLASSIFY = "fileClassify"; // 文件分类
        String SORT_FLAG = "sortFlag";         // 排序字段
        String SORT_TYPE = "sortType";         // 排序方式
        String RECYCLE = "recycle";            // 废纸篓
    }

    static {
        CLASSIFY_MAP = new HashMap<>(32);
        CLASSIFY_MAP.put("txt", ClassifyENUM.TXT);
        CLASSIFY_MAP.put("doc", ClassifyENUM.TXT);
        CLASSIFY_MAP.put("wps", ClassifyENUM.TXT);
        CLASSIFY_MAP.put("pdf", ClassifyENUM.TXT);
        CLASSIFY_MAP.put("ppt", ClassifyENUM.TXT);
        CLASSIFY_MAP.put("xls", ClassifyENUM.TXT);
        CLASSIFY_MAP.put("word", ClassifyENUM.TXT);
        CLASSIFY_MAP.put("html", ClassifyENUM.TXT);
        CLASSIFY_MAP.put("docx", ClassifyENUM.TXT);
        CLASSIFY_MAP.put("pptx", ClassifyENUM.TXT);
        CLASSIFY_MAP.put("xlsx", ClassifyENUM.TXT);
        CLASSIFY_MAP.put("bmp", ClassifyENUM.PHOTO);
        CLASSIFY_MAP.put("gif", ClassifyENUM.PHOTO);
        CLASSIFY_MAP.put("jpg", ClassifyENUM.PHOTO);
        CLASSIFY_MAP.put("pic", ClassifyENUM.PHOTO);
        CLASSIFY_MAP.put("png", ClassifyENUM.PHOTO);
        CLASSIFY_MAP.put("svg", ClassifyENUM.PHOTO);
        CLASSIFY_MAP.put("ico", ClassifyENUM.PHOTO);
        CLASSIFY_MAP.put("jpeg", ClassifyENUM.PHOTO);
        CLASSIFY_MAP.put("webp", ClassifyENUM.PHOTO);
        CLASSIFY_MAP.put("qt", ClassifyENUM.VIDEO);
        CLASSIFY_MAP.put("rm", ClassifyENUM.VIDEO);
        CLASSIFY_MAP.put("avi", ClassifyENUM.VIDEO);
        CLASSIFY_MAP.put("mov", ClassifyENUM.VIDEO);
        CLASSIFY_MAP.put("asf", ClassifyENUM.VIDEO);
        CLASSIFY_MAP.put("wav", ClassifyENUM.VIDEO);
        CLASSIFY_MAP.put("mp4", ClassifyENUM.VIDEO);
        CLASSIFY_MAP.put("navi", ClassifyENUM.VIDEO);
        CLASSIFY_MAP.put("mp3", ClassifyENUM.MUSIC);
        CLASSIFY_MAP.put("vma", ClassifyENUM.MUSIC);
        CLASSIFY_MAP.put("flac", ClassifyENUM.MUSIC);
        CLASSIFY_MAP.put("midi", ClassifyENUM.MUSIC);

        XCLOUD_FILE_TYPE_ICON_MAP = new HashMap<>(32);
        XCLOUD_FILE_TYPE_ICON_MAP.put("7z", "7z.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("avs", "avs.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("csv", "csv.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("doc", "doc.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("docx", "doc.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("dwg", "dwg.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("eps", "eps.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("git", "git.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("gift", "git.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("java", "java.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("jpg", "jpg.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("jpeg", "jpg.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("mov", "mov.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("mp4", "mp4.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("pdf", "pdf.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("png", "png.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("ppt", "ppt.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("pptx", "ppt.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("psd", "psd.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("svg", "svg.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("txt", "txt.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("xls", "xls.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("xlsx", "xlsx.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("xml", "xml.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("zip", "zip.png");
        XCLOUD_FILE_TYPE_ICON_MAP.put("rar", "rar.png");
    }
}